From: Jonas Ã…dahl Date: Fri, 19 Aug 2016 04:14:33 +0000 (+0800) Subject: recorder: Composite captured images before passing into gstreamer X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~744 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f9ef80749af3535879f6e3d11ac3489270b849f1;p=gnome-shell.git recorder: Composite captured images before passing into gstreamer Mutter may capture the screen in multiple capture regions. If this is done, take these images and composite them onto one large image, which is then passed into the gstreamer source. --- diff --git a/src/shell-recorder.c b/src/shell-recorder.c index cb2e93f76..6205703a7 100644 --- a/src/shell-recorder.c +++ b/src/shell-recorder.c @@ -22,6 +22,7 @@ #include "shell-global.h" #include "shell-recorder-src.h" #include "shell-recorder.h" +#include "shell-util.h" #define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications" #define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled" @@ -437,17 +438,21 @@ recorder_record_frame (ShellRecorder *recorder, if (n_captures == 0) return; - /* - * TODO: Deal with each capture region separately, instead of dropping - * anything except the first one. - */ + if (n_captures == 1) + image = cairo_surface_reference (captures[0].image); + else + image = shell_util_composite_capture_images (captures, + n_captures, + recorder->area.x, + recorder->area.y, + recorder->area.width, + recorder->area.height); - image = captures[0].image; data = cairo_image_surface_get_data (image); - size = captures[0].rect.width * captures[0].rect.height * 4; + size = (cairo_image_surface_get_height (image) * + cairo_image_surface_get_stride (image)); - /* TODO: Capture more than the first framebuffer. */ - for (i = 1; i < n_captures; i++) + for (i = 0; i < n_captures; i++) cairo_surface_destroy (captures[i].image); g_free (captures);